package br.com.massai.model.entity;

import java.io.Serializable;
import java.math.BigDecimal;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import javax.persistence.Transient;

@Entity
@SequenceGenerator(name = "seqItemLancamento", sequenceName = "seq_item_lancamento", allocationSize = 1)
@NamedQueries({@NamedQuery(name = "ItemLancamento.findAll", query = "SELECT il FROM ItemLancamento il")})
@Table(name = "ITEM_LANCAMENTO", schema = "PORTAL")
public class ItemLancamento implements Serializable {

	private static final long serialVersionUID = 619807148339183031L;

	@Id
	@Column(name = "ID_ITEM_LANCAMENTO")
	@GeneratedValue(generator = "seqItemLancamento", strategy = GenerationType.SEQUENCE)
	private Long id;

	@ManyToOne(optional = false)
	@JoinColumn(referencedColumnName = "ID_LANCAMENTO", name = "ID_LANCAMENTO")
	private Lancamento lancamento;

	@ManyToOne(optional = true, fetch = FetchType.EAGER, cascade = CascadeType.REFRESH)
	@JoinColumn(referencedColumnName = "ID_ITEM_PLANILHA", name = "ID_ITEM_PLANILHA")
	private ItemPlanilha itemPlanilha;
	
	@ManyToOne(optional = false, cascade = CascadeType.ALL)
	@JoinColumn(referencedColumnName = "ID_ITEM_ORCAMENTO", name = "ID_ITEM_ORCAMENTO")
	private ItemOrcamento itemOrcamento;

	@Column(name = "QUANTIDADE", nullable = true, precision = 10, scale = 4, columnDefinition = "DECIMAL(10,4)")
	private BigDecimal quantidade;

	@Column(name = "VALOR_PERCENTUAL", nullable = true, precision = 10, scale = 4, columnDefinition = "DECIMAL(10,4)")
	private BigDecimal valorPercent;
	
	@Column(name = "VALOR_UNITARIO", nullable = true, precision = 10, scale = 4, columnDefinition = "DECIMAL(10,4)")
	private BigDecimal valorUnitario;
	
	@Column(name = "OBSERVACAO", columnDefinition = "VARCHAR2(1000)")
	private String observacao;

	@Transient
	private BigDecimal valorParceladoGratificacao;
	
	@Transient
	private BigDecimal totalPerc;

	@Transient
	private BigDecimal total;
	
	public ItemLancamento() {
		lancamento = new Lancamento();
		itemPlanilha = new ItemPlanilha();
		quantidade = new BigDecimal("0");
		valorPercent = new BigDecimal("0");
		total = new BigDecimal("0");
		totalPerc = new BigDecimal("0");
	}

	public Long getId() {
		return id;
	}

	public void setId(Long id) {
		this.id = id;
	}

	public Lancamento getLancamento() {
		return lancamento;
	}

	public void setLancamento(Lancamento lancamento) {
		this.lancamento = lancamento;
	}

	public BigDecimal getValorPercent() {
		return valorPercent;
	}

	public void setValorPercent(BigDecimal valorPercent) {
		if(valorPercent != null)
			this.valorPercent = valorPercent;
	}

	public BigDecimal getQuantidade() {
		return quantidade;
	}

	public void setQuantidade(BigDecimal quantidade) {
		this.quantidade = quantidade;
	}

	public BigDecimal getTotal() {
		return total;
	}

	public void setTotal(BigDecimal total) {
		this.total = total;
	}

	public ItemPlanilha getItemPlanilha() {
		return itemPlanilha;
	}

	public void setItemPlanilha(ItemPlanilha itemPlanilha) {
		this.itemPlanilha = itemPlanilha;
	}

	public BigDecimal getTotalPerc() {
		return totalPerc;
	}

	public void setTotalPerc(BigDecimal totalPerc) {
		this.totalPerc = totalPerc;
	}

	public ItemOrcamento getItemOrcamento() {
		return itemOrcamento;
	}

	public void setItemOrcamento(ItemOrcamento itemOrcamento) {
		this.itemOrcamento = itemOrcamento;
	}

	public String getObservacao() {
		return observacao;
	}

	public void setObservacao(String observacao) {
		this.observacao = observacao;
	}

	public BigDecimal getValorUnitario() {
		return valorUnitario;
	}

	public void setValorUnitario(BigDecimal valorUnitario) {
		this.valorUnitario = valorUnitario;
	}

	public BigDecimal getValorParceladoGratificacao() {
		return valorParceladoGratificacao;
	}

	public void setValorParceladoGratificacao(BigDecimal valorParceladoGratificacao) {
		this.valorParceladoGratificacao = valorParceladoGratificacao;
	}
}